#include <iostream>
#include <sstream>
#include <string>

#include "Envios.h"



using namespace std;

//Metodo Costructor
Envios::Envios(string numID, string Descripcion,float pe, char seguridad, float impuestos, string clie, Area* a)
{
    cliente = clie;
    peso = pe;
    this->numID=numID;
    this->Descripcion=Descripcion;
    this->seguridad=seguridad;
    this->impuestos=impuestos;
    area = a;
}

Envios::Envios(string numID, string Descripcion,float pe, char seguridad, float impuestos, string clie)
{
    cliente = clie;
    peso = pe;
    this->numID=numID;
    this->Descripcion=Descripcion;
    this->seguridad=seguridad;
    this->impuestos=impuestos;
    //this->valorDelProducto=valorDelProducto;
    area = new Area();
}


Envios::Envios()
{
    cliente = "ninguno";
    this->numID="ninguno";
    this->Descripcion="ninguno";
    this->seguridad='A';
    this->impuestos=0;
    peso = 0;
    area = new Area();
}

Envios::~Envios()
{
    delete area;
}




//Metodos set y get

void Envios::setCliente(string clie)
{
    cliente = clie;
}

string Envios::getCliente()
{
    return cliente;
}

string Envios::getNumID()
{
    return numID;
}

void Envios::setNumID(string val)
{
    numID=val;
}

string Envios::getDescripcion()
{
    return Descripcion;
}

void Envios::setDescripcion(string val)
{
    Descripcion=val;
}

float Envios::getPeso()
{
    return peso;
}

void Envios::setPeso(float val)
{
    peso=val;

}

char Envios::getSeguridad()
{
    return seguridad;
}

void Envios::setSeguridad(char val)
{
    seguridad=val;
}

float Envios::getImpuestos()
{
    return impuestos;
}

void Envios::setImpuestos(float val)
{
    impuestos=val;

}


/*string Envios::toString()
{cout<<"aqui";
    stringstream s;
    s<<"---------------\n"
    <<"ID: "<<numID<<endl
    <<"Descripcion: "<<Descripcion<<endl
    <<"Peso: "<<peso<<endl
    <<"Seguridad: "<<seguridad<<endl
    <<"Impuestos: "<<impuestos<<endl;

    return s.str();
}
*/
void Envios::mostrarEnvio()
{
    //cout<<toString()<<endl;
     cout<<"---------------\n";
    cout<<"ID: "<<numID<<endl;
    cout<<"Descripcion: "<<Descripcion<<endl;
    //cout<<"Peso: "<<peso<<endl;
    cout<<"Seguridad : "<<seguridad<<endl;
    //cout<<"Impuestos: "<<impuestos<<endl;
    cout<<"Cliente: "<<cliente<<endl;

    area->mostrarArea();
}

Area* Envios::getArea()
{
    return area;
}
void Envios::setArea(Area* obj)
{
    area = obj;
}

float Envios::costoEnvio()
{
    if(peso<=20)
        return area->getRuta()->costoRuta()  +  ( area->getRuta()->costoRuta()*0.20);

    else if(peso<=50)
        return area->getRuta()->costoRuta()  +   ( area->getRuta()->costoRuta()*0.30);
    else
        return area->getRuta()->costoRuta()  +   ( area->getRuta()->costoRuta()*0.50);
}
void Envios::generarEnvio(string numID, string Descripcion, float pes, char seguridad, float impuestos, string clie)
{
    this->numID=numID;
    cliente = clie;
    this->Descripcion=Descripcion;
    peso=pes;
    this->seguridad=seguridad;
    this->impuestos=impuestos;
}

void Envios::rutaEnvio()
{
    area->selecArea();
}
